/**
 * 上传文件骨架
 */
var uploadCI = {
    fileInput: null, // html file控件
    dragDrop: null, // 拖拽敏感区域
    upButton: null, // 提交按钮
    url: "", // ajax地址
    fileFilter: [], // 过滤后的文件数组
    filter: function (files) { // 选择文件组的过滤方法
        return files;
    },
    quality: 50,//清晰度
    min: 0, // 最小上传数
    max: 1000, // 最大上传数
    onSelect: function () {
    }, // 文件选择后
    onDelete: function () {
    }, // 文件删除后
    onDragOver: function () {
    }, // 文件拖拽到敏感区域时
    onDragLeave: function () {
    }, // 文件离开到敏感区域时
    onProgress: function () {
    }, // 文件上传进度
    onSuccess: function () {
    }, // 文件上传成功时
    onFailure: function () {
    }, // 文件上传失败时,
    onComplete: function () {
    }, // 文件全部上传完毕时

    /* 开发参数和内置方法分界线 */

    // 文件拖放
    funDragHover: function (e) {
        e.stopPropagation();
        e.preventDefault();
        this[e.type === "dragover" ? "onDragOver" : "onDragLeave"]
            .call(e.target);
        return this;
    },
    // 获取选择文件，file控件或拖放
    funGetFiles: function (e) {
        // 取消鼠标经过样式
        this.funDragHover(e);

        // 获取文件列表对象
        var files = e.target.files || e.dataTransfer.files;
        // 继续添加文件
        this.fileFilter = this.fileFilter.concat(this.filter(files));
        for (var i = 0, file; file = this.fileFilter[i]; i++) {
            // 增加唯一索引值
            file.index = i;
        }
        this.onSelect(this.fileFilter);
        return this;
    },

    // 删除对应的文件
    funDeleteFile: function (fileDelete) {
        var arrFile = [];
        for (var i = 0, file; file = this.fileFilter[i]; i++) {
            if (file != fileDelete) {
                arrFile.push(file);
            } else {
                this.onDelete(fileDelete);
            }
        }
        this.fileFilter = arrFile;
        return this;
    },

    // 验证文件数量
    validateUpload: function () {
        return true;
    },

    // 文件上传
    funUploadFile: function () {
        var self = this;
        if (self.validateUpload()) {
            for (var i = 0, file; file = this.fileFilter[i]; i++) {
                (function (file) {
                    uploadFile.initResizeBiz(file, function (formData) {
                        var xhr = new XMLHttpRequest();
                        if (xhr.upload) {
                            // 上传中
                            xhr.upload.addEventListener("progress",
                                function (e) {
                                    self.onProgress(file, e.loaded, e.total);
                                }, false);
                            // 文件上传成功或是失败
                            xhr.onreadystatechange = function (e) {
                                if (xhr.readyState == 4) {
                                    if (xhr.status == 200) {
                                        self.onSuccess(file, JSON.parse(xhr.responseText));
                                        self.funDeleteFile(file);
                                        if (!self.fileFilter.length) {
                                            // 全部完毕
                                            self.onComplete();
                                        }
                                    } else {
                                        self.onFailure(file, JSON.parse(xhr.responseText));
                                    }

                                }
                            };
                            // var formData = new FormData();
                            // formData.append('FileContent', file);
                            // 开始上传
                            xhr.open("POST", file.uploadUrl, true);
                            xhr.send(formData);
                        }
                    });
                })(file);
            }
        }
    },

    init: function () {
        var self = this;

        if (this.dragDrop) {
            this.dragDrop.addEventListener("dragover", function (e) {
                self.funDragHover(e);
            }, false);
            this.dragDrop.addEventListener("dragleave", function (e) {
                self.funDragHover(e);
            }, false);
            this.dragDrop.addEventListener("drop", function (e) {
                self.funGetFiles(e);
            }, false);
        }

        // 文件选择控件选择
        if (this.fileInput) {
            this.fileInput.addEventListener("change", function (e) {
                self.funGetFiles(e);
            }, false);
        }

        // 上传按钮提交
        if (this.upButton) {
            this.upButton.addEventListener("click", function (e) {
                self.funUploadFile(e);
            }, false);
        }
    }
};
